import observe from './observe/observe.js'

function initStatte(vm){
   
    if(vm.$options.data){
        initData(vm)
    }
    
}

function initData(vm){
    let data=vm.$options.data
    //判断data写的是函数还是对象
    data=vm._data=typeof data==='function'?data.call(vm):data

    for(let key in data){
        proxy(vm,'_data',key)
    }
    //开始观测数据
    observe(data)
}

function proxy(vm,obj,key){
    //将data中的数据直接映射到vm上
    //就是可以直接用this.msg 取值
    Object.defineProperty(vm,key,{
        get(){
            return vm[obj][key]
        },
        set(newValue){
           vm[obj][key]=newValue
        }
    })
}

export default initStatte